﻿#include <iostream>
using namespace std;
typedef struct
{
	int top;
	int size;
	char* date;
}Sqstack;
void init(Sqstack& s, int len)
{
	s.size = len;
	s.top = -1;
	s.date = new char[len];
}
int Push(Sqstack& s, char data)
{
	if (s.top == s.size - 1)
	{
		return -1;
	}
	else
	{
		s.top++;
		s.date[s.top] = data;
		return 1;
	}
}
char Pop(Sqstack& s)
{
	if (s.top == -1)
	{
		return -1;
	}
	else
	{
		char c = s.date[s.top];
		s.top--;
		return c;
	}
}

int main()
{
	string str;
	int len, t;
	cin >> t;
	for (int i = 0; i < t; i++)
	{
		cin >> str;
		len = str.length();
		Sqstack s;
		init(s, len);
		for (int j = 0; j < len; j++)
		{
			Push(s, str[j]);
		}
		for (int j = 0; j < len; j++)
		{
			cout<<Pop(s);
		}

		cout << endl;
	}
	return 0;
}
/**********************************************************************
	Problem: 1391
	User: 202400204009
	Language: C++
	Result: AC
	Time:12 ms
	Memory:2224 kb
**********************************************************************/

////#include <iostream>
////using namespace std;
////typedef struct
////{
////	int top;
////	int size;
////	char *date;
////}Sqstack;
////void init(Sqstack &s, int len)
////{
////	s.size = len;
////	s.top = -1;
////	s.date = new char[len];
////}
////int Push(Sqstack &s, char data)
////{
////		if (data == '#')
////		{
////			if (s.top > -1)
////			{
////				s.top--;
////			}
////			return 1;
////		
////		}
////		else
////		{
////			if (s.top == s.size - 1)
////			{
////				return -1;
////			}
////			s.top++;
////			s.date[s.top] = data;
////			
////		}
////		return 1;
////	}
////
////
////
////int main()
////{
////	string str;
////	int len,t;
////	cin >> t;
////	for (int i = 0; i < t; i++)
////	{
////		cin >> str;
////		len = str.length();
////		Sqstack s;
////		init(s, len);
////		for (int j = 0; j < len; j++)
////		{
////			 Push(s, str[j]);
////		}
////		if (s.top == -1)
////		{
////			cout << "NULL" << endl;
////		}
////		else
////		{
////			for (int i = 0; i <= s.top; i++)
////			{
////				cout << s.date[i];
////			}
////			cout << endl;
////		}
////	}
////	return 0;
////}
//#include <iostream>
//using namespace std;
//#include <string>
//typedef struct
//{
//	int top;
//	int size;
//	char* date;
//}Sqstack;
//void init(Sqstack& s, int len)
//{
//	s.size = len;
//	s.top = -1;
//	s.date = new char[len];
//}
//int Push(Sqstack& s, char data)
//{
//	if (s.top == s.size - 1)
//	{
//		return -1;
//	}
//	else
//	{
//		s.top++;
//		s.date[s.top] = data;
//		return 1;
//	}
//}
//int Pop(Sqstack& s)
//{
//	if (s.top ==- 1)
//	{
//		return -1;
//	}
//	else
//	{
//		s.top--;
//		return 1;
//	}
//}
//int main()
//{
//	string str;
//	int len, t;
//	cin >> t;
//	cin.ignore();
//	for (int i = 0; i < t; i++)
//	{
//		getline(cin, str);
//		len = str.length();
//		Sqstack s;
//		char* p = &str[0];
//		init(s, len);
//		int flag = 1;
//		for (int j = 0; j < len; j++)
//		{
//			if (*p == '(' || *p == '[' || *p == '{')
//			{
//				Push(s, *p);
//			}
//			else if (*p == ')' || *p == ']' || *p == '}')
//			{
//				if (s.top == -1)
//				{
//					flag = 0;
//					break;
//				}
//				if (*p == ')' && s.date[s.top] == '(' || *p == ']' && s.date[s.top] == '[' || *p == '}'&& s.date[s.top] == '{')
//				{
//					Pop(s);
//				}
//			}
//			p++;
//		}
//
//		if (flag == 1 && s.top == -1)
//		{
//			cout << "ok" << endl;
//		}
//		else
//		{
//			cout << "error" << endl;
//		}
//	}
//	return 0;
//}
//#include <iostream>
//using namespace std;
//typedef struct
//{
//	int top;
//	int size;
//	char *date;
//}Sqstack;
//void init(Sqstack &s, int len)
//{
//	s.size = len;
//	s.top = -1;
//	s.date = new char[len];
//}
//int Push(Sqstack &s, char data)
//{
//		if (data == '#')
//		{
//			if (s.top > -1)
//			{
//				s.top--;
//			}
//			return 1;
//		
//		}
//		else
//		{
//			if (s.top == s.size - 1)
//			{
//				return -1;
//			}
//			s.top++;
//			s.date[s.top] = data;
//			
//		}
//		return 1;
//	}
//
//
//
//int main()
//{
//	string str;
//	int len,t;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> str;
//		len = str.length();
//		Sqstack s;
//		init(s, len);
//		for (int j = 0; j < len; j++)
//		{
//			 Push(s, str[j]);
//		}
//		if (s.top == -1)
//		{
//			cout << "NULL" << endl;
//		}
//		else
//		{
//			for (int i = 0; i <= s.top; i++)
//			{
//				cout << s.date[i];
//			}
//			cout << endl;
//		}
//	}
//	return 0;
//}
//#include <iostream>
//using namespace std;
//#include <string>
//#include <vector>
//typedef struct
//{
//	int xp;
//	int yp;
//}Sqstack;
//struct Sqstack1 
//{
//	int top;
//	int size;
//	Sqstack* date;
//	bool empty() {
//		return top == -1;
//	}
//};
//void init(Sqstack1& s, int len)
//{
//	s.size = len;
//	s.top = -1;
//	s.date = new Sqstack[len];
//}
//int Push(Sqstack1& s, Sqstack data)
//{
//	if (s.top == s.size - 1)
//	{
//		return -1;
//	}
//	else
//	{
//		s.top++;
//		s.date[s.top] = data;
//		return 1;
//	}
//}
//int Pop(Sqstack1& s)
//{
//	if (s.top == -1)
//	{
//		return -1;
//	}
//	else
//	{
//		s.top--;
//		return 1;
//	}
//}
//int main()
//{
//	int n, t;
//	cin >> t ;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> n;
//		Sqstack1 path;
//		Sqstack1 path1;
//		int** arr = new int* [n];
//		for (int i = 0; i < n; i++)
//		{
//			arr[i] = new int[n];
//		}
//		for (int i = 0; i < n; i++)
//		{
//			for (int j = 0; j < n; j++)
//			{
//				cin >> arr[i][j];
//			}
//		}
//		init(path, n * n);
//		init(path1, n * n);
//		Sqstack start = { 0,0 };
//		if (arr[start.xp][start.yp] != 0)
//		{
//			cout << "no path" << endl;
//			for (int i = 0; i < n; i++)
//			{
//				delete[]arr[i];
//			}
//			delete[]arr;
//			delete[]path.date;
//			delete[]path1.date;
//			continue;
//		}
//		Push(path, start);
//		arr[start.xp][start.yp] = -1;
//		int flag = 0;
//		while (!path.empty())
//		{
//			start = path.date[path.top];
//			if (start.xp == n - 1 && start.yp == n - 1)
//			{
//				flag = 1;
//				break;
//			}
//			int flag1 = 0;
//			Sqstack next;
//			if (start.xp >= 0 && start.xp <n && start.yp + 1 >= 0 && start.yp + 1 < n && arr[start.xp][start.yp + 1] == 0)
//			{
//				next = { start.xp,start.yp + 1 };
//				arr[next.xp][next.yp] = -1;
//				flag1 = 1;
//			}
//			else if (start.xp + 1 >= 0 && start.xp + 1 < n && start.yp >= 0 && start.yp <n && arr[start.xp + 1][start.yp] == 0)
//			{
//				next = { start.xp + 1,start.yp };
//				arr[next.xp][next.yp] = -1;
//				flag1 = 1;
//			}
//			else if (start.xp >= 0 && start.xp < n && start.yp - 1 >= 0 && start.yp - 1 <n && arr[start.xp][start.yp - 1] == 0)
//			{
//				next = { start.xp ,start.yp - 1 };
//				arr[next.xp][next.yp] = -1;
//				flag1 = 1;
//			}
//			else if (start.xp - 1 >= 0 && start.xp - 1 < n && start.yp >= 0 && start.yp < n && arr[start.xp - 1][start.yp] == 0)
//			{
//				next = { start.xp - 1 ,start.yp };
//				arr[next.xp][next.yp] = -1;
//				flag1 = 1;
//			}
//			if (flag1 == 1)
//			{
//				Push(path, next);
//				arr[next.xp][next.yp] = -1;
//			}
//			else
//			{
//				Pop(path);
//			}
//		}
//		//path是保存路径的堆栈，堆栈中每个元素都包含x坐标和y坐标，用属性xp和yp表示
////path1是一个临时堆栈，把path的数据倒序输出到path1，使得路径按正序输出
//		if (flag == 1)  //找到路径
//		{
//			while (!path.empty())
//			{
//				Push(path1, path.date[path.top]);
//				Pop(path);
//			}
//			int i = 0;  //以下是输出路径的代码
//			while (!path1.empty())
//			{
//				Sqstack cpos = path1.date[path1.top];
//				Pop(path1);
//				if ((++i) % 4 == 0)
//					cout << '[' << cpos.xp << ',' << cpos.yp << ']' << "--" << endl;
//				else
//					cout << '[' << cpos.xp << ',' << cpos.yp << ']' << "--";
//			}
//			cout << "END" << endl;
//		}
//		else
//			cout << "no path" << endl; //找不到路径输出no path
//		for (int i = 0; i < n; i++)
//		{
//			delete[]arr[i];
//		}
//		delete[]arr;
//		delete[]path.date;
//		delete[]path1.date;
//	}
//	return 0;
//}
//#define CRT_SECURE_NO_WARNINGS 1
//#include<iostream>
//#include<string>
//#include<cstdlib>
//#include<cstring>
//#include<iomanip>
//#include<stack> // 使用C++自带的STL栈
//using namespace std;
//#define OK 0
//#define ERROR -1
//#define OVERFLOW -1
//#define OPSETSIZE 7 // 运算符号集合长度，目前只有7个符号
//typedef int Status;
//char Prior[7][7] = {
//    '>', '>', '<', '<', '<', '>', '>',
//    '>', '>', '<', '<', '<', '>', '>',
//    '>', '>', '>', '>', '<', '>', '>',
//    '>', '>', '>', '>', '<', '>', '>',
//    '<', '<', '<', '<', '<', '=', ' ',
//    '>', '>', '>', '>', ' ', '>', '>',
//    '<', '<', '<', '<', '<', ' ', '='
//};
//float Operate(float a, unsigned char theta, float b)
//{
//    switch (theta)
//    {
//    case'+':return a + b;
//    case'-':return a - b;
//    case'*':return a * b;
//    case'/':
//        if (b == 0)
//        {
//            return -1;
//        }
//        else
//            return a * 1.0 / b;
//    default:return 0;
//    }
//}
//char OPSET[OPSETSIZE] = { '+', '-', '*', '/', '(', ')', '#' }; // 运算符集合
//Status In(char Test, char* TestOp) // 判断字符Test是否是运算符
//{
//    for (int i = 0; i < OPSETSIZE; i++)
//    {
//        if (Test == TestOp[i])
//        {
//            return 1;
//        }
//    }
//            return 0;
//}
//char precede(char Aop, char Bop)//运算符优先级关系
//{
//    int t1=-1, t2=-1;
//    for (int i = 0; i < OPSETSIZE; i++)
//    {
//        if (Aop == OPSET[i])
//        {
//            t1 = i;
//            break;
//        }
//    }
//    for (int i = 0; i < OPSETSIZE; i++)
//    {
//        if (Bop == OPSET[i])
//        {
//            t2 = i;
//            break;
//        }
//    }
//    return Prior[t1][t2];
//}
//float EvaluateExpression(string MyExp)
//{
//    // 算术表达式求值的算符优先算法。
//    // 设OPTR和OPND分别为运算符栈和运算数栈，OP为运算符集合。
//    stack<char> OPTR;   // 运算符栈，字符元素
//    stack<double> OPND; // 运算数栈，实数元素
//    char TempData[20];
//    double Data, a, b, r;
//    char theta, Dr[2];
//    char c;
//    int i = 0; // 用于控制字符串的位置移动
//    // InitStack(OPTR); InitStack(OPND); 两行代码无用去掉
//    // Push(OPTR, '#'); c = MyExpression; 原有的两行代码改造为下面两句
//    OPTR.push('#');
//    c = MyExp[0];
//    strcpy(TempData, "\0");
//    while (c != '#' || OPTR.top() != '#')
//    {
//        if (!In(c, OPSET))
//        {
//            // 读入的字符不是运算符，是 1 个数字
//            Dr[0] = c;
//            Dr[1] = '\0';
//            strcat(TempData, Dr);
//            c = MyExp[++i]; // 读下一个字符
//            if (In(c, OPSET))
//            {
//                Data = (float)atof(TempData);
//                // Push(OPND, Data);
//                OPND.push(Data);
//                //.......改造上一句代码为一句c++代码
//                strcpy(TempData, "\0");
//            }
//        }
//        else
//        {
//            // 是运算符，开始进行计算
//            switch (precede(OPTR.top(), c))
//            {
//            case '<':   // 栈顶元素优先权低
//                // Push(OPTR, *c);
//                OPTR.push(c);// ........改造上一句代码为一句c++代码
//                c = MyExp[++i];// ........读下一个字符
//                break;
//            case '=':   // 脱括号并接收下一字符
//                // Pop(OPTR, x);
//                OPTR.pop();// ........改造上一句代码为1-2句c++代码
//                c = MyExp[++i];// ........读下一个字符
//                break;
//            case '>':   // 退栈并将运算结果入栈
//                // Pop(OPTR, theta);
//                // Pop(OPND, b);
//                // Pop(OPND, a);
//                // Push(OPND, Operate(a, theta, b));
//                // ........把上面四句代码改造成7-8句c++代码
//                theta = OPTR.top();
//                OPTR.pop();
//                 b= OPND.top();
//                OPND.pop();
//                a = OPND.top();
//                OPND.pop();
//                OPND.push(Operate(a, theta, b));
//                break;
//            } // end switch
//        }   // end else
//    }   // end while
//    // return GetTop(OPND);
//    return OPND.top();
//    // ........改造上一句代码为一句c++代码
//}   // end function
//int main()
//{
//    string Exp;
//    int t;
//    double result;
//    cin >> t;
//    while (t--)
//    {
//        cin >> Exp;
////        result = EvaluateExpression(Exp);
////        cout << fixed << setprecision(4) << result << endl;
////    }
////    return 0;
////}
//#include<iostream>
//#include<string>
//#include<cstdlib>
//#include<cstring>
//#include<iomanip>
//#include<stack> // 使用C++自带的STL栈
//#include<cctype>    
//#include<limits>
//#include <algorithm>
//using namespace std;
//int precede(char op)
//{
//	if (op == '+' || op == '-')
//		return 0;
//	else if (op == '*' || op == '/')
//		return 1;
//	else
//		return -1;
//}
//
//bool isop(char c) {
//	return c == '+' || c == '-' || c == '*' || c == '/';
//}
//string bschange_(string& s)
//{
//	stack<string>operatestack;
//	stack<char>opstack;
//	for (int i = s.length() - 1; i >= 0; --i)
//	{
//		char ch = s[i];
//		if (ch == ' ')
//			continue;
//		if (isdigit(ch))
//		{
//			string num;
//			while (i >= 0 && isdigit(s[i]))
//			{
//				num += s[i];
//				i--;
//			}
//			i++;
//			reverse(num.begin(), num.end());
//			operatestack.push(num);
//		}
//		else if (ch == ')')
//		{
//			opstack.push('(');
//		}
//		else if (ch == '(')
//		{
//			while (!opstack.empty() && opstack.top() != '(')
//			{
//				char op = opstack.top();
//				opstack.pop();
//				string left = operatestack.top();
//				operatestack.pop();
//				string right = operatestack.top();
//				operatestack.pop();
//				operatestack.push(string(1, op) + " " + left + " " + right);
//			}
//			if (!opstack.empty())
//				opstack.pop();
//		}
//		else if (isop(ch))
//		{
//			while (!opstack.empty() && opstack.top() != '(' && precede(opstack.top()) > precede(ch))
//			{
//				if (operatestack.size() < 2)
//				{
//					return " ";
//				}
//				char op = opstack.top();
//				opstack.pop();
//				string left = operatestack.top();
//				operatestack.pop();
//				string right = operatestack.top();
//				operatestack.pop();
//				operatestack.push(string(1, op) + " " + left + " " + right);
//			}
//			opstack.push(ch);
//		}
//	}
//	while (!opstack.empty())
//	{
//		if (operatestack.size() < 2)
//		{
//			return " ";
//		}
//		char op = opstack.top();
//		opstack.pop();
//		string left = operatestack.top(); operatestack.pop();
//		string right = operatestack.top(); operatestack.pop();
//		operatestack.push(string(1, op) + " " + left + " " + right);
//	}
//
//	return operatestack.top();
//}
//string nbschange_(string& s)
//{
//	string operatestack;
//	stack<char>opstack;
//	for (size_t i = 0; i < s.length(); ++i)
//	{
//		char ch = s[i];
//		if (ch == ' ')
//			continue;
//		if (isdigit(ch))
//		{
//			string num;
//			while (i < s.length() && isdigit(s[i]))
//			{
//				num += s[i];
//				i++;
//			}
//			i--;
//			operatestack += num + " ";
//		}
//		if (ch == '(')
//		{
//			opstack.push(ch);
//		}
//		else if (ch == ')')
//		{
//			while (!opstack.empty() && opstack.top() != '(')
//			{
//				operatestack += opstack.top() + string(" ");
//				opstack.pop();
//			}
//			if (!opstack.empty())
//				opstack.pop();
//		}
//		else if (isop(ch))
//		{
//			while (!opstack.empty() && opstack.top() != '(' && precede(opstack.top()) >= precede(ch))
//			{
//				operatestack += opstack.top() + string(" ");
//				opstack.pop();
//			}
//			opstack.push(ch);
//		}
//	}
//	while (!opstack.empty())
//	{
//		operatestack += opstack.top() + string(" ");
//		opstack.pop();
//	}
//	if (!operatestack.empty())
//	{
//		operatestack.pop_back();
//	}
//	return operatestack;
//}
//int main()
//{
//	int t;
//	string str;
//	cin >> t;
//	cin.ignore(numeric_limits<streamsize>::max(), '\n');
//	for (int i = 0; i < t; i++)
//	{
//		getline(cin, str);
//		if (!bschange_(str).empty()) {
//			cout << bschange_(str) << endl;
//		}
//		cout << nbschange_(str) << endl;
//		if (i != t - 1) 
//		{
//			cout << endl;
//		}
//	}
//	return 0;
//}
//
